<?php
class FacturaPeer extends BaseFacturaPeer {
    static public function cambiarEstatus($numero)
    {
        $c= new Criteria();
        $c->add(self::NUMERO,$numero);
        $factura=self::doSelectOne($c);
        $factura->setEstatus('Correcto');
        $factura->save();
        return 'Se ha cambiado a correcto el Estatus de la factura';
    }
    static public function doSelectFacturasCorrectas($proveedor, $desde, $hasta)
    {
        if($desde!=''){
           $aux = explode('-',$desde);
           $desde = $aux[2].'-'.$aux[1].'-'.$aux[0]; 
        }
        if($hasta!=''){
           $aux = explode('-',$hasta);
           $hasta = $aux[2].'-'.$aux[1].'-'.$aux[0]; 
        }
        $result ='';
        $c = new Criteria();
        $c->add(self::ESTATUS,'Correcto');
        if($proveedor!='')
        {
            $c->add(self::PROVEEDOR,$proveedor);
        }
        if($desde!='' && $hasta!='')
        {
            $c->add(self::FECHA,$desde,Criteria::GREATER_EQUAL);
            $c->addAnd(self::FECHA, $hasta, Criteria::LESS_EQUAL); 
        }
        else
        {
            if($desde!='')
            {
                $c->add(self::FECHA,$desde,Criteria::GREATER_EQUAL);
            }
            if($hasta!='')
            {
                $c->add(self::FECHA, $hasta, Criteria::LESS_EQUAL); 
            }
        }
        $vproducts = self::doSelect($c);
        foreach ($vproducts as $vproduct) {
          
          $result .= '<tr><td style="border: 1px dotted #999;">'.$vproduct->getNumero().'</td><td style="border: 1px dotted #999;">'.$vproduct->getFecha().'</td><td style="border: 1px dotted #999;">'.$vproduct->getProveedor1().'</td><td style="border: 1px dotted #999;">'.$vproduct->getFechaTrans().'</td><td style="border: 1px dotted #999;">'.$vproduct->getNumTrans().'</td><td style="border: 1px dotted #999;">'.$vproduct->getCantTotal().' '.$vproduct->getUMedida().'</td><td style="border: 1px dotted #999;">'.detFacturaPeer::doSelectCantSum($vproduct->getNumero()).' '.$vproduct->getMoneda1().'</td><td style="border: 1px dotted #999;">'.detFacturaPeer::doSelectCantCarg($vproduct->getNumero()).' '.$vproduct->getMoneda1().'</td><td style="border: 1px dotted #999;">'.$vproduct->getTotal().' '.$vproduct->getMoneda1().'</td></tr>';
        }
        return $result;
    }
    static public function doSelectFacturasIncorrectas($proveedor, $desde, $hasta)
    {
        if($desde!=''){
           $aux = explode('-',$desde);
           $desde = $aux[2].'-'.$aux[1].'-'.$aux[0]; 
        }
        if($hasta!=''){
           $aux = explode('-',$hasta);
           $hasta = $aux[2].'-'.$aux[1].'-'.$aux[0]; 
        }
        $result ='';
        $c = new Criteria();
        $c->add(self::ESTATUS,'Incorrecto');
        if($proveedor!='')
        {
            $c->add(self::PROVEEDOR,$proveedor);
        }
        if($desde!='' && $hasta!='')
        {
            $c->add(self::FECHA,$desde,Criteria::GREATER_EQUAL);
            $c->addAnd(self::FECHA, $hasta, Criteria::LESS_EQUAL); 
        }
        else
        {
            if($desde!='')
            {
                $c->add(self::FECHA,$desde,Criteria::GREATER_EQUAL);
            }
            if($hasta!='')
            {
                $c->add(self::FECHA, $hasta, Criteria::LESS_EQUAL); 
            }
        }
        $vproducts = self::doSelect($c);
        foreach ($vproducts as $vproduct) {
          
          $result .= '<tr><td style="border: 1px dotted #999;">'.$vproduct->getNumero().'</td><td style="border: 1px dotted #999;">'.$vproduct->getFecha().'</td><td style="border: 1px dotted #999;">'.$vproduct->getProveedor1().'</td><td style="border: 1px dotted #999;">'.ReclamoPeer::doSelectNumeroByFactura($vproduct->getNumero()).'</td><td style="border: 1px dotted #999;">'.$vproduct->getCantTotal().' '.$vproduct->getUMedida().'</td><td style="border: 1px dotted #999;">'.detFacturaPeer::doSelectCantSum($vproduct->getNumero()).' '.$vproduct->getMoneda1().'</td><td style="border: 1px dotted #999;">'.detFacturaPeer::doSelectCantCarg($vproduct->getNumero()).' '.$vproduct->getMoneda1().'</td><td style="border: 1px dotted #999;">'.$vproduct->getTotal().' '.$vproduct->getMoneda1().'</td></tr>';
        }
        return $result;
    }
    static public function doSelectFechasFacturas($desde, $hasta)
    {
        if($desde!=''){
           $aux = explode('-',$desde);
           $desde = $aux[2].'-'.$aux[1].'-'.$aux[0]; 
        }
        if($hasta!=''){
           $aux = explode('-',$hasta);
           $hasta = $aux[2].'-'.$aux[1].'-'.$aux[0]; 
        }
        $result ='';
        $c = new Criteria();
        if($desde!='' && $hasta!='')
        {
            $c->add(self::FECHA,$desde,Criteria::GREATER_EQUAL);
            $c->addAnd(self::FECHA, $hasta, Criteria::LESS_EQUAL); 
        }
        else
        {
            if($desde!='')
            {
                $c->add(self::FECHA,$desde,Criteria::GREATER_EQUAL);
            }
            if($hasta!='')
            {
                $c->add(self::FECHA, $hasta, Criteria::LESS_EQUAL); 
            }
        }
        $vproducts = self::doSelect($c);
        foreach ($vproducts as $vproduct) {
          
          $result .= $result.$vproduct->getFecha().'.';
        }
        return $result;
    }
    static public function doSelectConsumoByFecha($fecha, $estacion)
    {
            $consumo = '0';
            $c= new Criteria();
            $c->add(self::FECHA,$fecha);
            $facturas = self::doSelect($c);
            foreach ($facturas as $factura)
            {
              $consumo = (float)$consumo + (float)detFacturaPeer::doSelectCantSum1($factura, $estacion);
            }
            return $consumo;
    }
    static public function doSelectEstaciones()
    {
        $retorna='';
        $c= new Criteria();
        $c->addGroupByColumn(self::ESTACION);
        $c->setDistinct();
        $facturas=self::doSelect($c);
        foreach ($facturas as $factura)
        {
          $retorna .= $factura->getEstacion().','.EstacionPeer::doSelectByCodigo($factura->getEstacion()).'.';
        }
        return $retorna;
    }
    static public function doSelectByNumero($id)
    {
            $c= new Criteria();
            $c->add(self::NUMERO,$id);
            $factura = self::doSelectOne($c);
            return ProveedorPeer::doSelectProveedorById($factura->getProveedor()).','.$factura->getFecha('d-m-Y').','.$factura->getFechatrans('d-m-Y').','.$factura->getNumtrans();
    }
    
    static public function doCountTransmitir()
    {
            $c= new Criteria();
            $c->addOr(self::NUMTRANS,null);
            $c->addOr(self::NUMTRANS,'');
            $factura = self::doCount($c);
            return $factura;
    }
    
    static public function doCountRetransmitir($lote)
    {
            $c= new Criteria();
            $c->add(self::NUMTRANS,$lote);
            $factura = self::doCount($c);
            return $factura;
    }
    
    static public function doSelectFacturasATransmitir()
    {
        // Creamos la conexión a ORACLE
        $conn = oci_connect("apps", "apps", "//dboftest:7040/FTEST");
        // Si no podemos conectarnos
        if (!$conn) {
           $m = oci_error();
           echo $m['message'], "\n";
           return "False";
        }
        // Borramos los registros de la BD ORACLE
        $s = oci_parse($conn,"DELETE AERO_AP_INV_TEMP_INTERFACE WHERE SOURCE='COMBUSTIBLE'");
        // Ejecutamos la instrucción de borrado
        $r = oci_execute($s, OCI_DEFAULT);
        // Hacemos commit de los cambios realizados
        $r = oci_commit($conn);
        if (!$r) {
                $e = oci_error($conn);
                echo $e['message'], "\n";
                return "False";
        }
        
        // Trabajamos con la BD MySQL
        $c= new Criteria();
        $c->add(self::ESTATUS,'Correcto');
        $c->addOr(self::NUMTRANS,null);
        $c->addOr(self::NUMTRANS,'');
        $facturas= self::doSelect($c);
        $monto='';
        $tasaCamb = '';
        $monedaE = '';
        $organizacion = '';
        $ruta = '';
        $numero = 0;
        $num = 0;
        $numTransmision = (rand(1,20).preg_replace('([^A-Za-z0-9])', '', date("Y-m-d")));
        foreach($facturas as $factura)
        {
            $numero++;
            $factura->setFechatrans(date("d-m-Y"));
            $factura->setNumtrans($numTransmision);
            $factura->save();
            $arreglo = explode('.',detFacturaPeer::doSelectByFactura1($factura->getNumero()));
            $monedaE = CompaniaPeer::doSelectMonedaById($factura->getEmpresa());
            foreach($arreglo as $linea)
            {
                $num++;
                if($linea != ''){
                  $lineaAux = explode(',',$linea);
                  if($lineaAux[0]=='COMBUSTIBLE')
                  {
                      $lineaAux[0]=$lineaAux[7];
                      $monto = $lineaAux[1] * $lineaAux[2];
                  }
                  else
                  {
                      $monto = $lineaAux[1] * $lineaAux[2];
                      $lineaAux[1]='0';
                  }
                  if($factura->getMoneda()!=$monedaE)
                  {
                      $tasaCamb = TasaCambPeer::doSelectTasaByMonedas($factura->getMoneda(),$monedaE);
                  }
                  else
                  {
                      $tasaCamb='1';
                  }
                  if(ProveedorPeer::doSelectTipoProveedorByRif($factura->getProveedor())=='Internacional')
                  {
                      $organizacion = '3';
                  }
                  else
                  {
                      $organizacion = '2';
                  }
                    $factor = TasaconvPeer::doSelectTasaByMedidas($factura->getUMedida(),CompaniaPeer::doSelectUMedidaById($factura->getEmpresa()));
                    if ($factor!='')
                    {
                        $valor = (float)$lineaAux[1] * (float)$factor;
                    }
                    else
                    {
                        $valor = '0';
                    }
                    if($lineaAux[3]=='')
                  {
                      $lineaAux[3]='IVA-EXCENTO';
                  }
                  else
                  {
                      $porcentaje = ImpuestoPeer::doSelectPorcentajeById($lineaAux[3]);
                      $cuenta = ImpuestoPeer::doSelectCuentaById($lineaAux[3]);
                      $lineaAux[3]= ImpuestoPeer::doSelectNombreById($lineaAux[3]);
                      $montoI = (float)$monto * ((float)$porcentaje/100);
                      $s = oci_parse($conn,"INSERT INTO AERO_AP_INV_TEMP_INTERFACE VALUES('".$factura->getProveedor()."','F-".$factura->getNumero()."','','".$factura->getFechaEmision()."','".strtoupper($lineaAux[3])."','".str_replace(".",",",$factura->getTotal())."','".MonedaPeer::doSelectById($factura->getMoneda())."','".str_replace(".",",",$tasaCamb)."','','','','02','".$cuenta."','000','000','000','000','000','000','000','".$organizacion."','000','".str_replace(".",",",$montoI)."','000','000','','000','COMBUSTIBLE','','','','')");
                      $r = oci_execute($s, OCI_DEFAULT);
                  }
                    $ruta = VueloPeer::doSelectRutaByNumVuelo($lineaAux[5]);
                    $s = oci_parse($conn,"INSERT INTO AERO_AP_INV_TEMP_INTERFACE VALUES('".$factura->getProveedor()."','F-".$factura->getNumero()."','','".$factura->getFechaEmision()."','".strtoupper($lineaAux[0])."','".str_replace(".",",",$factura->getTotal())."','".MonedaPeer::doSelectById($factura->getMoneda())."','".str_replace(".",",",$tasaCamb)."','','','','02','".$lineaAux[8]."','".$lineaAux[6]."','000','".$lineaAux[5]."','".$ruta."','".$lineaAux[4]."','000','000','".$organizacion."','".$lineaAux[3]."','".str_replace(".",",",$monto)."','".$factura->getUMedida()."','".$lineaAux[1]."','','".str_replace(".",",",$valor)."','COMBUSTIBLE','','','','')");
                    $r = oci_execute($s, OCI_DEFAULT);
                }
            }
        }
        $r = oci_commit($conn);
        if (!$r) {
                $e = oci_error($conn);
                echo $e['message'], "\n";
                return "False";
        }
		
	$s = oci_parse($conn,"SELECT COUNT(*) from AERO_AP_INV_TEMP_INTERFACE");
        $r = oci_execute($s, OCI_DEFAULT);

       $row = oci_fetch_array($s, OCI_RETURN_NULLS);
                
        // Cerrar conexión a Oracle
        oci_close($conn);
        
        
        if($row['COUNT(*)']!= $num)
            return $numero--.'.'.$numTransmision;
        else
            return $numero.'.'.$numTransmision;
    }
    static public function doSelectFacturasARetransmitir($lote)
    {
        // Creamos la conexión a ORACLE
        $conn = oci_connect("apps", "apps", "//dboftest:7040/FTEST");
        // Si no podemos conectarnos
        if (!$conn) {
           $m = oci_error();
           echo $m['message'], "\n";
           return "False";
        }
        // Borramos los registros de la BD ORACLE
        $s = oci_parse($conn,"DELETE AERO_AP_INV_TEMP_INTERFACE WHERE SOURCE='COMBUSTIBLE'");
        // Ejecutamos la instrucción de borrado
        $r = oci_execute($s, OCI_DEFAULT);
        // Hacemos commit de los cambios realizados
        $r = oci_commit($conn);
        if (!$r) {
                $e = oci_error($conn);
                echo $e['message'], "\n";
                return "False";
        }
        
        // Trabajamos con la BD MySQL
        $c= new Criteria();
        $c->add(self::NUMTRANS,$lote);
        $facturas= self::doSelect($c);
        $monto='';
        $tasaCamb = '';
        $monedaE = '';
        $organizacion = '';
        $ruta = '';
        $numero = 0;
        $num = 0;
        foreach($facturas as $factura)
        {
            $numero++;
            $factura->setFechatrans(date("d-m-Y"));
            $factura->save();
            $arreglo = explode('.',detFacturaPeer::doSelectByFactura1($factura->getNumero()));
            $monedaE = CompaniaPeer::doSelectMonedaById($factura->getEmpresa());
            foreach($arreglo as $linea)
            {
                $num++;
                if($linea != ''){
                  $lineaAux = explode(',',$linea);
                  if($lineaAux[0]=='COMBUSTIBLE')
                  {
                      $lineaAux[0]=$lineaAux[7];
                      $monto = $lineaAux[1] * $lineaAux[2];
                  }
                  else
                  {
                      $monto = $lineaAux[1] * $lineaAux[2];
                      $lineaAux[1]='0';
                  }
                  if($factura->getMoneda()!=$monedaE)
                  {
                      $tasaCamb = TasaCambPeer::doSelectTasaByMonedas($factura->getMoneda(),$monedaE);
                  }
                  else
                  {
                      $tasaCamb='1';
                  }
                  if(ProveedorPeer::doSelectTipoProveedorByRif($factura->getProveedor())=='Internacional')
                  {
                      $organizacion = '3';
                  }
                  else
                  {
                      $organizacion = '2';
                  }
                    $factor = TasaconvPeer::doSelectTasaByMedidas($factura->getUMedida(),CompaniaPeer::doSelectUMedidaById($factura->getEmpresa()));
                    if ($factor!='')
                    {
                        $valor = (float)$lineaAux[1] * (float)$factor;
                    }
                    else
                    {
                        $valor = '0';
                    }
                    if($lineaAux[3]=='')
                  {
                      $lineaAux[3]='IVA-EXCENTO';
                  }
                  else
                  {
                      $porcentaje = ImpuestoPeer::doSelectPorcentajeById($lineaAux[3]);
                      $cuenta = ImpuestoPeer::doSelectCuentaById($lineaAux[3]);
                      $lineaAux[3]= ImpuestoPeer::doSelectNombreById($lineaAux[3]);
                      $montoI = (float)$monto * ((float)$porcentaje/100);
                      $s = oci_parse($conn,"INSERT INTO AERO_AP_INV_TEMP_INTERFACE VALUES('".$factura->getProveedor()."','F-".$factura->getNumero()."','','".$factura->getFechaEmision()."','".strtoupper($lineaAux[3])."','".str_replace(".",",",$factura->getTotal())."','".MonedaPeer::doSelectById($factura->getMoneda())."','".str_replace(".",",",$tasaCamb)."','','','','02','".$cuenta."','000','000','000','000','000','000','000','".$organizacion."','000','".str_replace(".",",",$montoI)."','000','000','','000','COMBUSTIBLE','','','','')");
                      $r = oci_execute($s, OCI_DEFAULT);
                  }
                    $ruta = VueloPeer::doSelectRutaByNumVuelo($lineaAux[5]);
                    $s = oci_parse($conn,"INSERT INTO AERO_AP_INV_TEMP_INTERFACE VALUES('".$factura->getProveedor()."','F-".$factura->getNumero()."','','".$factura->getFechaEmision()."','".strtoupper($lineaAux[0])."','".str_replace(".",",",$factura->getTotal())."','".MonedaPeer::doSelectById($factura->getMoneda())."','".str_replace(".",",",$tasaCamb)."','','','','02','".$lineaAux[8]."','".$lineaAux[6]."','000','".$lineaAux[5]."','".$ruta."','".$lineaAux[4]."','000','000','".$organizacion."','".$lineaAux[3]."','".str_replace(".",",",$monto)."','".$factura->getUMedida()."','".$lineaAux[1]."','','".str_replace(".",",",$valor)."','COMBUSTIBLE','','','','')");
                    $r = oci_execute($s, OCI_DEFAULT);
                }
            }
        }
        $r = oci_commit($conn);
        if (!$r) {
                $e = oci_error($conn);
                echo $e['message'], "\n";
                return "False";
        }
		
	$s = oci_parse($conn,"SELECT COUNT(*) from AERO_AP_INV_TEMP_INTERFACE");
        $r = oci_execute($s, OCI_DEFAULT);

       $row = oci_fetch_array($s, OCI_RETURN_NULLS);
                
        // Cerrar conexión a Oracle
        oci_close($conn);
        
        
        if($row['COUNT(*)']!= $num)
            return $numero--;
        else
            return $numero;
    }
    static public function doSelectProveedores()
    {
        $retorna='';
        $c= new Criteria();
        $c->addGroupByColumn(self::PROVEEDOR);
        $c->setDistinct();
        $facturas=self::doSelect($c);
        foreach ($facturas as $factura)
        {
          $retorna = $retorna.$factura->getProveedor().','.ProveedorPeer::doSelectProveedorById($factura->getProveedor()).'.';
        }
        return $retorna;
    }
} // FacturaPeer
